#!/bin/bash

MEMO_FILE=~/.jdk_switcher_last

set +e

# 检查 fzf
if ! command -v fzf &> /dev/null; then
    echo "⚠️ 需要安装 fzf 工具，请先运行: brew install fzf"
    exit 1
fi

# 获取 JDK 列表
jdk_list=$(/usr/libexec/java_home -V 2>&1 | grep -E '[0-9]+\.[0-9]+\.[0-9]+' | awk '{print $1 " " $(NF)}')

if [ -z "$jdk_list" ]; then
  echo "❌ 没有找到任何已安装的 JDK！"
  exit 1
fi

# 读取上次使用
if [ -f "$MEMO_FILE" ]; then
  last_selected=$(cat "$MEMO_FILE")
else
  last_selected=""
fi

# 判断数量
jdk_count=$(echo "$jdk_list" | wc -l | tr -d ' ')

if [ "$jdk_count" -eq 1 ]; then
  selected="$jdk_list"
else
  # 自动记忆上次选择
  selected=$(echo "$jdk_list" | fzf --prompt="请选择要切换的 JDK: " --height=10 --tac --query="$last_selected")
fi

if [ -n "$selected" ]; then
  path=$(echo "$selected" | awk '{print $2}')
  version=$(echo "$selected" | awk '{print $1}')
  
  export JAVA_HOME="$path"
  export PATH="$JAVA_HOME/bin:$PATH"

  if [ -n "$ZSH_VERSION" ]; then
    profile=~/.zshrc
  elif [ -n "$BASH_VERSION" ]; then
    profile=~/.bash_profile
  else
    echo "⚠️ 未识别的 shell，跳过更新"
    exit 1
  fi

  # 更新 shell profile
  if ! grep -q "JAVA_HOME" "$profile"; then
    echo "export JAVA_HOME=\"$JAVA_HOME\"" >> "$profile"
    echo "export PATH=\"\$JAVA_HOME/bin:\$PATH\"" >> "$profile"
  else
    sed -i "" "s|export JAVA_HOME=.*|export JAVA_HOME=\"$JAVA_HOME\"|" "$profile"
    sed -i "" "s|export PATH=.*\$|export PATH=\"\$JAVA_HOME/bin:\$PATH\"|" "$profile"
  fi

  echo "✅ 更新了 $profile 配置"

  # 记忆上次选择
  echo "$version" > "$MEMO_FILE"

  echo "✅ 已切换到: $JAVA_HOME"
  java -version

  source "$profile"
else
  echo "❌ 未选择任何版本，已取消切换。"
fi

set -e